<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:key name="gl_version" match="gl" use="@version"/>

<!-- parse root node -->
<xsl:template match="/glxml">
<xsl:text>/* gl-static.h - OpenGL header for linking with opengl32.lib */

#include &lt;windows.h&gt;

</xsl:text>

<xsl:apply-templates select="key('gl_version','1.0')"/>
<xsl:apply-templates select="key('gl_version','1.1')"/>

<xsl:text>/* eof */
</xsl:text>
</xsl:template>



<!-- opengl 1.0 -->
<xsl:template match="key('gl_version','1.0')">
<xsl:text>
/*
 * OpenGL 1.0 API
 */

/* types */ 
</xsl:text>

<xsl:apply-templates select="type"/>

<xsl:text>
/* tokens */
</xsl:text>

<xsl:apply-templates select="token"/>

<xsl:text>
/* functions */
</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.1 -->
<xsl:template match="key('gl_version','1.1')">
<xsl:text>
/*
 * OpenGL 1.1 API
 */

/* types */ 
</xsl:text>

<xsl:apply-templates select="type"/>

<xsl:text>
/* tokens */
</xsl:text>

<xsl:apply-templates select="token"/>

<xsl:text>
/* functions */
</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>




<!-- types, tokens and functions -->
<xsl:template match="type">
<xsl:text>typedef </xsl:text>
<xsl:value-of select="typedef"/>
<xsl:text> GL</xsl:text>
<xsl:value-of select="name"/>
<xsl:text>;
</xsl:text>
</xsl:template>

<xsl:template match="token">
<xsl:text>#define GL_</xsl:text>
<xsl:value-of select="name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="value"/>
<xsl:text>
</xsl:text>
</xsl:template>

<xsl:template match="function">

<xsl:choose>
	<xsl:when test="args">
		<xsl:apply-templates select="args"/>
	</xsl:when>
	<xsl:otherwise>
		<xsl:choose>
			<xsl:when test="return">
				<xsl:text>WINGDIAPI </xsl:text>
				<xsl:value-of select="return"/><xsl:text> APIENTRY gl</xsl:text>
			</xsl:when>
			<xsl:otherwise>
				<xsl:text>WINGDIAPI </xsl:text>
				<xsl:text>void APIENTRY gl</xsl:text>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:value-of select="name"/>
		<xsl:text>(void);
</xsl:text>
	</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="args">
<xsl:choose>
	<xsl:when test="../return">
		<xsl:text>WINGDIAPI </xsl:text>
		<xsl:value-of select="../return"/><xsl:text> APIENTRY gl</xsl:text>
		<xsl:value-of select="../name"/>
	</xsl:when>
	<xsl:otherwise>
		<xsl:text>WINGDIAPI </xsl:text>
		<xsl:text>void APIENTRY gl</xsl:text>
		<xsl:value-of select="../name"/>
	</xsl:otherwise>
</xsl:choose>
	
<xsl:if test="@suffix">
	<xsl:value-of select="@suffix"/>
</xsl:if>

<xsl:text>(</xsl:text>
<xsl:for-each select="arg">
<xsl:value-of select="type"/>
<xsl:text> </xsl:text>
<xsl:value-of select="name"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>

<xsl:text>;
</xsl:text>
</xsl:template>

</xsl:stylesheet>
